<template>
  <div class="contarner-page" @click.stop="showLanguageHandel">
    <page-header ref="languageRef"></page-header>
    <main>
      <div class="downloader flex_ccenter" v-if="!success">
        <div class="container">
          <div class="banner-heading flex_ccenter">
            <div class="heading-item">
              <h1 class="title fw700 f-42 c-fff">Instagram Hikaye İndir</h1>
              <h2 class="sub c-fff f-18 fw400">
                En İyi Instagram Hikayesi İndirici Ücretsiz
              </h2>
            </div>
          </div>
          <div class="form flex_center">
            <div class="input-box flex_between">
              <!-- <input
                    type="text"
                    class="input f-18"
                    v-model="input"
                    @input="handleInput"
                    @paste="handleInput"
                    placeholder="Paste URL Instagram"
                    list="fruits"
                    name="fruit"
                  />
                  <datalist id="fruits">
                    <option value="Apple"></option>
                    <option value="Banana"></option>
                    <option value="Cherry"></option>
                  </datalist> -->
              <input
                type="text"
                class="input f-18"
                v-model="input"
                :disabled="isHttpLoading"
                @input="handleInput"
                @paste="handleInput"
                @keydown="sendDownload($event)"
                placeholder="Paste URL Instagram"
              />
              <div
                class="Paste shou flex_center"
                @click="handleClickPasted"
                v-if="input == ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Paste</div>
              </div>
              <div
                class="clear shou flex_center"
                v-if="input != '' && !isHttpLoading"
                @click.stop="input = ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Clear</div>
              </div>
            </div>
            <div
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
              class="submit shou fw700 c-fff flex_center"
            >
              Download
            </div>
            <div v-else class="submit shou fw700 c-fff flex_center">
              Please wait
            </div>
          </div>
          <div class="app-submit flex_ccenter">
            <div
              class="submit flex_center"
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
            >
              <div class="fw700 c-fff f-21">Download</div>
            </div>
            <div class="submit flex_center" v-else>
              <div class="fw700 c-fff f-21">Please wait</div>
            </div>
          </div>
          <div class="loading" v-if="isHttpLoading">
            <div class="loading-dots flex_center">
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
            </div>
            <div class="tips f-18 flex_center">
              <div>Veriler alınıyor, lütfen birkaç saniye bekleyin!</div>
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError1">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              Site, bağlantınızı gizli olduğundan işleyemiyor
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError2">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              Girdiğiniz veriler bir bağlantı değil, lütfen geçerli bir bağlantı
              girin örnek:
              <div>https://www.instagram.com/reel/Cml9qu-ISqx</div>
            </div>
          </div>
        </div>
      </div>
      <!-- 广告位start -->
      <!-- 广告位end -->
      <div class="container" v-if="!success">
        <div class="body-content">
          <div class="app-box">
            <div class="app-box__info">
              <h3 class="app-box__title f-21 fw700 c-000">
                Uygulama Insta Downloader ile indirin
              </h3>
              <p class="f-16 c-ccc">
                Uygulamamız, Instagram videolarını indirmek için hızlı ve basit bir çözüm sunarak filigransız HD kalitesinde videolar sağlar.
              </p>
            </div>
            <div class="app-link">
              <a 
                  target="_blank" href="https://play.google.com/store/apps/details?id=ins.freevideodownload.pro">
                <img src="/static/images/google-play.webp" alt="Download app " />
              </a>
              <a href="https://apps.apple.com/us/app/repost-for-video-save-story/id6462401460"  target="_blank">
                <img src="/static/images/IOS.webp" alt="Download app " />
              </a>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Savinginsta ile Instagram Hikayesi İndir
            </h3>
            <p class="f-16 c-ccc">
              Savinginsta.Com, bilinen en iyi Instagram hikaye indiricisidir.
               kullanım kolaylığı ve yüksek kaliteli Instagram indirme yeteneği nedeniyle
               hikayeleri en yüksek hızlarda. Instagram Hikayelerini cihazınıza indirin
               Instagram'ımızı kullanarak en yüksek kalitede telefon, PC veya tablet
               video indiriciyi doğrudan tarayıcınızdan kullanın. Yazılım yok
               kurulum gereklidir ve hem Android hem de iOS'u destekler.
            </p>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Instagram Hikaye İndirmeleri için Neden Savinginsta Kullanılmalı?
            </h3>
            <p class="f-16 c-ccc">
              Büyüleyici fotoğraf ve videolarla dolu Instagram Hikayeleri
               dijital ifademizin önemli bir kısmı ancak yalnızca görünür durumda
               24 saat boyunca. Instagram Hikayelerini görüntülemeyi seviyorsanız ve bunu yapmak istiyorsanız
               bunları indirin, Savinginsta yardım etmek için burada. Basitçe girin
               Instagram Hikaye URL'sini Savinginsta'ya aktarın ve en iyisini indirin
               Instagram Hikayeleri ücretsiz.
            </p>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Video Instagram Hikayesi Nasıl İndirilir?
              </h3>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">Adım01:</span>
                  <span class="f-16 c-000"> 
                    Hikayesini yayınlamak istediğiniz Instagram kullanıcı adını girin
                     Savinginsta.App'a indirin.</span
            >
                </div>
              </div>
              <div class="step">
                <span class="fw700 c-blue f-16">Adım02:</span>
                <span class="f-16 c-000">
                  İndirmek istediğiniz Hikayeyi seçin.</span
                >
              </div>
              <div class="step">
                <span class="fw700 c-blue f-16">Adım03:</span>
                <span class="f-16 c-000"
                  >Video Instagram hikayesini cihazınıza kaydetmek için 'İndir'i tıklayın.
                   cihaz.</span
                >
              </div>
            </div>
          </div>
          <div class="features c-fff">
            <h3 class="h3 fw700 f-21">
              Insta Story Telefonunuza Nasıl İndirilir?
            </h3>
            <div class="attributes-list">
              <div class="features-title">
                İndirmek son derece kolaydır. İşte ayrıntılı bir kılavuz:
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Instagram'ı Chrome, Firefox veya benzeri bir tarayıcıda açın.
                   Instagram uygulaması.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">Çekici bulduğunuz bir hikayeyi seçin.</div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  İndirmek istediğiniz videoya tıklayın.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Hikaye URL'sini adres çubuğundan kopyalayın.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Kullanıcı adını Savinginsta'daki adres kutusuna yapıştırın.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Instagram hikayesini çevrimiçi indirmek için 'İndir'e basın.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  İndirdiğiniz IG hikayesi fotoğrafınız veya videonuz artık klasörünüzde.
                </div>
              </div>
            </div>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Instagram Hikayeleri ve Öne Çıkanlar Çevrimiçi Nasıl İndirilir?
              </h3>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="f-16 c-000"
                    >Bağlantıyı Instagram Hikayelerinden alın veya kopyalayın
                     İndirmek istediğiniz Instagram hesabının kullanıcı adı
                     itibaren.</span
                  >
                </div>
              </div>
              <div class="step">
                <span class="f-16 c-000"
                  >Savinginsta - Insta Story Downloader'a gidin ve yapıştırın.
                   Araç çubuğuna hikaye bağlantısı.
                </span>
              </div>
              <div class="step">
                <span class="f-16 c-000"
                  >Ekranda görüntülenen Hikayeyi seçin, hikayeyi seçin
                   İndirmek istediğiniz dosyayı seçin ve 'İndir'e basın.</span
                >
              </div>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Savinginsta.Com'u En İyi Instagram (IG) Hikayesi İndirme Yapan Nedir?
               Alet?
            </h3>
            <ul class="f-16 c-ccc">
              <li>Kullanıcı dostu ve en hızlı araç.</li>
              <li>En iyi hizmeti sunmak için sürekli güncellemeler.</li>
              <li>
                Tamamen bedava! Gelişimimizi minimum düzeyde destekliyoruz
                 reklam.
              </li>
            </ul>
          </div>
          <div class="faq-section">
            <h3 class="faq-title f-36 c-000 italic">FAQ</h3>
            <div class="accordion">
              <div
                id="faq"
                itemscope="itemscope"
                itemtype="https://schema.org/FAQPage"
              >
                <div
                  itemprop="mainEntity"
                  itemscope="itemscope"
                  itemtype="https://schema.org/Question"
                  class="accordion-item"
                  :key="k"
                  v-for="(item, k) in faqList"
                >
                  <h4 itemprop="name" class="accordion-title fw700 f-16">
                    {{ item.title }}
                  </h4>
                  <div
                    itemprop="acceptedAnswer"
                    itemscope=""
                    itemtype="https://schema.org/Answer"
                  >
                    <div
                      itemprop="text"
                      class="accordion-text f-16 c-ccc fw400"
                    >
                      {{ item.content }}
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- 解析结果 start -->
      <div class="container" v-if="success">
        <success-content
          @refresh="refresh"
          :list="successList"
        ></success-content>
      </div>
      <!-- 解析结果 end -->
    </main>
    <footer>
      <div class="container">
        <div class="footer-content">
          <div class="footer-link">
            <div class="row flex_between">
              <div class="col-12">
                <div class="link-label fw700 c-000 f-21">Aletler</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/tr/instagram-story-download"
                      >Instagram Hikaye İndirici</nuxt-link
                    >
                  </li>
                  <li>
                    <nuxt-link to="/tr/instagram-reels-video-download"
                      >Instagram Makaraları İndiricisi</nuxt-link
                    >
                  </li>
                  <li>
                    <a href="https://savingtik.com/" target="_blank"
                      >Tiktok İndirici</a
                    >
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">Destek</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/contact"> Temas etmek </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/blog"> Blog </nuxt-link>
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">Yasal</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/terms-of-service">
                      Kullanım Şartları
                    </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/privacy-policy"> Gizlilik Politikası </nuxt-link>
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <div class="copyright flex_ccenter">
            <b class="fw700 f-21 c-000"
              >Instagram veya Meta ile bağlantımız yok</b
            >
            <div class="c-ccc f-16">
                © {{new Date().getFullYear()}} Insta Downloader All rights reserved. 
            </div>
          </div>
        </div>
      </div>
    </footer>
  </div>
</template>
    
<script>
import { mapState, mapGetters, mapMutations } from "vuex";
import pageHeader from "~/components/page-header.vue";
import SuccessContent from "~/components/success-content.vue";
import CryptoJS from "crypto-js";
import { handleClick, checkString } from "@/plugins/Firebase.js";
export default {
  components: { pageHeader, SuccessContent },
  head: {
    htmlAttrs: {
      lang: "tr",
    },
    bodyAttrs: {
      "data-lang": "tr",
    },
    title: "En İyi Ücretsiz Instagram Hikaye İndiricisi",
    meta: [
      { property: "og:locale", content: "tr" },
      //Page Information
      {
        name: "description",
        content:
          "Ücretsiz Savinginsta Instagram Downloader ile Instagram hikayelerini zahmetsizce çevrimiçi indirin. Yüksek kaliteli Instagram hikayelerini reklamsız olarak doğrudan bilgisayarınıza veya telefonunuza kaydedin. Filigran yok",
      },

      //Schema.org Microdata
      {
        itemprop: "name",
        content: "En İyi Ücretsiz Instagram Hikaye İndiricisi",
      },

      // Facebook / OpenGraph
      {
        property: "og:title",
        content: "En İyi Ücretsiz Instagram Hikaye İndiricisi",
      },
      { property: "og:type", content: "website" },
      { property: "og:url", content: "https://savinginsta.com/tr/instagram-story-download" },

      {
        property: "og:description",
        content:
          "Ücretsiz Savinginsta Instagram Downloader ile Instagram hikayelerini zahmetsizce çevrimiçi indirin. Yüksek kaliteli Instagram hikayelerini reklamsız olarak doğrudan bilgisayarınıza veya telefonunuza kaydedin. Filigran yok",
      },
      //Twitter
      { name: "twitter:card", content: "summary" },
      { name: "twitter:url", content: "https://savinginsta.com/tr/instagram-story-download" },
      {
        name: "twitter:title",
        content: "En İyi Ücretsiz Instagram Hikaye İndiricisi",
      },
      {
        name: "twitter:description",
        content:
          "Ücretsiz Savinginsta Instagram Downloader ile Instagram hikayelerini zahmetsizce çevrimiçi indirin. Yüksek kaliteli Instagram hikayelerini reklamsız olarak doğrudan bilgisayarınıza veya telefonunuza kaydedin. Filigran yok",
      },
      //multilingual
      {
        name: "google",
        content: "notranslate",
      },
    ],
    link: [
      //multilingual
      {
        rel: "alternate",
        hreflang: "x-default",
        href: "https://savinginsta.com/tr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "en",
        href: "https://savinginsta.com/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "en-in",
        href: "https://savinginsta.com/in/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "vi",
        href: "https://savinginsta.com/vn/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "tr",
        href: "https://savinginsta.com/tr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "id",
        href: "https://savinginsta.com/id/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "fr",
        href: "https://savinginsta.com/fr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "pt",
        href: "https://savinginsta.com/pt/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ru",
        href: "https://savinginsta.com/ru/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "es",
        href: "https://savinginsta.com/es/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ms",
        href: "https://savinginsta.com/ms/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ko",
        href: "https://savinginsta.com/ko/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ja",
        href: "https://savinginsta.com/ja/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "jv",
        href: "https://savinginsta.com/jv/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "cs",
        href: "https://savinginsta.com/cs/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "de",
        href: "https://savinginsta.com/de/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "it",
        href: "https://savinginsta.com/it/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "pl",
        href: "https://savinginsta.com/pl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "hu",
        href: "https://savinginsta.com/hu/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "nl",
        href: "https://savinginsta.com/nl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ro",
        href: "https://savinginsta.com/ro/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "el",
        href: "https://savinginsta.com/el/instagram-story-download",
      },
      {
        rel: "canonical",
        href: "https://savinginsta.com/tr/instagram-story-download",
      },
    ],
    script: [
      {
        json: {
          "@context": "http://schema.org",
          "@graph": [
            {
              "@type": "WebSite",
              name: "Savinginsta",
              alternateName: "Instagram downloader",
              url: "https://savinginsta.com",
            },
            {
              "@type": "WebPage",
              name: "En İyi Ücretsiz Instagram Hikaye İndiricisi - Savinginsta", //title
              inLanguage: "tr", //语种
              description:
                "Ücretsiz Savinginsta Instagram Downloader ile Instagram hikayelerini zahmetsizce çevrimiçi indirin. Yüksek kaliteli Instagram hikayelerini reklamsız olarak doğrudan bilgisayarınıza veya telefonunuza kaydedin. Filigran yok.", //元描述
              image: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg", //绝对路径
              url: "https://savinginsta.com/tr/instagram-story-download", //当前url
            },
          ],
        },
        type: "application/ld+json",
      },
    ],
  },
  data() {
    return {
      input: "",
      success: false,
      isHttpLoading: false,
      httpError1: false,
      httpError2: false,
      current: 0,
      successList: [],
      faqList: [
        {
          title: `Instagram Hikaye İndiricisi nedir?`,
          content: `Instagram Stories'i kayıt olmadan kolayca indirmek için ücretsiz bir araçtır.`,
        },
        {
          title: `Video Instagram Hikayesi Nasıl İndirilir?`,
          content: `Savinginsta'da Instagram hikayelerini hızlı bir şekilde indirmek için yukarıdaki basit talimatları izleyin.`,
        },
        {
          title: `Instagram'dan Öne Çıkanlar'ı nasıl indirebilirim?`,
          content: `Instagram öne çıkanlarını indirmek için hesabın herkese açık olması gerekir. Savinginsta.app'e kullanıcı adını girin ve 'İndir'e tıklayın.`,
        },
        {
          title: `IG Hikayelerini Anonim Olarak Görüntülemek İstersem ne olur?`,
          content: `Mükemmel bir çözümümüz var: anonim Instagram Hikaye görüntüleyicimiz Instagram Hikaye Görüntüleyici.`,
        },
        {
          title: `Instagram Hesabınızla Giriş Yapmanız Gerekiyor mu?`,
          content: `Giriş yapmanıza gerek yok. Savinginsta, güvenli ve anonim indirmeler sağlayarak hiçbir kişisel bilgi istemez.`,
        },
        {
          title: `Videoları Doğrudan Instagram'a Kaydedebilir miyim?`,
          content: `Evet ama video bitene kadar beklemeniz gerekiyor.`,
        },
        {
          title: `Web Sitesi Bilgisayarlar için Insta'dan İndirmeyi Destekliyor mu?`,
          content: `Kesinlikle bir bilgisayardan video, fotoğraf, hikaye ve daha fazlasını indirebilirsiniz. Ayrıca bakınız: PC'nizdeki Insta'dan indirin.`,
        },
        {
          title: `Android için Instagram Hikayesini İndirebilir misiniz?`,
          content: `Evet, gönderi bağlantısını kopyalayın, web sitemizin kutusuna yapıştırın ve kaydedin. Daha fazla bilgi için: Android'de Insta'dan indirin.`,
        },
        {
          title: `Story Instagram Videoları ve Fotoğrafları iPhone’a Nasıl İndirilir?`,
          content: `Android'deki kadar kolay. İOS için Instagram Hikayesini İndirme kılavuzuna göz atın.`,
        },
        {
          title: `Kayıtlı Hikaye Videolarını Bilgisayarda Nerede Bulabilirim?`,
          content: `Windows için Ctrl+J ve Mac için Shift+Command+J tuşlarını kullanarak tarayıcınızın indirme geçmişini kontrol edin.`,
        },
      ],
    };
  },
  computed: {
    ...mapGetters(["language"]),
  },
  mounted() {
    this.debouncedDownInput = this.debounce(this.downInput, 1000);
  },
  methods: {
    async downloadHandel() {
      if (this.isHttpLoading || this.input === "") return;
      this.isHttpLoading = false;
      this.httpError1 = false;
      this.httpError2 = false;
      this.input = this.input.replace(/^.*\s?https:\/\//, "https://");
      const insUrlPattern = new RegExp("^http(s|)://.*instagram.com.*/.*$");
      let type = checkString(this.input);
      if (!insUrlPattern.test(this.input)) {
        //点击解析下载按钮
        handleClick("action_ins_detect_boinsom", {
          site: "other",
          noislink: this.input,
          from: "story",
          type: type,
        });
        this.httpError2 = true;
        this.isHttpLoading = false;
        return;
      }
      //点击解析下载按钮
      handleClick("action_ins_detect_boinsom", {
        site: "other",
        from: "story",
        type: type,
      });
      //开始解析  ins_start_resolve
      handleClick("ins_start_resolve", {
        islink: this.input,
        from: "story",
        type: type,
      });
      this.isHttpLoading = true;
      try {
        let result = this.uki(this.input);
        const response = await fetch(
          "https://savinginsta.com/api/downloader/analysis",
          {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
              path: result,
            }),
          }
        );
        let encryptedResponse = await response.text();
        let parse = JSON.parse(encryptedResponse);
        if (parse.code != 200) {
          // 解析失败  ins_resolve_fail
          handleClick("ins_resolve_fail", {
            reason: "Failed to fetch",
            islink: this.input,
            from: "story",
            type: type,
          });
          this.httpError1 = true;
          this.isHttpLoading = false;
          return;
        } else {
          //解析成功  ins_resolve_success
          handleClick("ins_resolve_success", {
            type: type,
            from: "story",
          });
          let decryptedResponse = await this.eki(parse.data); // 使用你的解密函数
          this.successList = JSON.parse(decryptedResponse);
          this.success = true;
          this.isHttpLoading = false;
        }
      } catch (error) {
        // 解析失败  ins_resolve_fail
        handleClick("ins_resolve_fail", {
          reason: "Failed to fetch",
          islink: this.input,
          from: "story",
          type: type,
        });
        console.error(error);
        this.httpError1 = true;
        this.isHttpLoading = false;
      }
    },

    uki(input) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      
  try {
        const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
        const keyBytes = CryptoJS.enc.Utf8.parse(complexKey);
        const inputBytes = CryptoJS.enc.Utf8.parse(input);
        const ivBytes = CryptoJS.lib.WordArray.random(IV_SIZE);
        const encrypted = CryptoJS.DES.encrypt(inputBytes, keyBytes, {
          iv: ivBytes,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7,
        });
        const ciphertext = ivBytes.concat(encrypted.ciphertext);
        return ciphertext.toString();
      } catch (error) {
        console.error(error);
        return null;
      }
    },
    eki(cipherText) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
      try {
        let keyBytes = CryptoJS.enc.Utf8.parse(
          complexKey.padEnd(CIPHER_ALGORITHM === "DES-CBC" ? 8 : 16)
        );
        let ivBytes = { iv: CryptoJS.enc.Hex.parse(process.env.DES_IV) }; // 如果使用CBC模式，需要一个初始化向量iv，这里是空向量
        let decrypted = CryptoJS.DES.decrypt(
          { ciphertext: CryptoJS.enc.Hex.parse(cipherText) },
          keyBytes,
          ivBytes
        );
        return decrypted.toString(CryptoJS.enc.Utf8);
      } catch (e) {
        console.error(e);
        return null;
      }
    },
    sendDownload(event) {
      if (event.keyCode === 13 && !this.isHttpLoading) {
        this.downloadHandel();
        event.preventDefault();
        return false;
      }
    },
    changeTab(k) {
      this.current = k;
    },
    handleInput(e) {
      this.debouncedDownInput(e);
    },
    debounce(fn, delay) {
      let timer;
      return function () {
        let context = this;
        let args = arguments;
        clearTimeout(timer);
        timer = setTimeout(() => {
          fn.apply(context, args);
        }, delay);
      };
    },
    downInput(e) {
      let type = checkString(e.target.value);
      // 粘贴链接到输入框 action_ins_paste
      handleClick("action_ins_paste", {
        islink: e.target.value,
        from: "story",
        type: type,
      });
    },
    handleClickPasted() {
      if (!navigator.clipboard) {
        console.log("Clipboard API not available");
        return;
      }
      navigator.clipboard
        .readText()
        .then((text) => {
          this.input = text;
          let type = checkString(text);
          // 粘贴链接到输入框 action_ins_paste
          handleClick("action_ins_paste", {
            islink: text,
            from: "story",
            type: type,
          });
        })
        .catch((err) => {
          console.error("Failed to read clipboard contents: ", err);
        });
    },
    showLanguageHandel() {
      this.$refs.languageRef.close();
    },
    refresh() {
      this.success = false;
      this.input = "";
      this.successList = [];
    },
  },
};
</script>
<style lang="scss" scoped>
 @import "@/static/style/story.css";
.loading {
  .loading-dots {
    position: relative;
    z-index: 999;
    margin-top: 70px;
  }

  .dot {
    background-color: #ffffff;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    margin: 0 10px;
    animation: loading-animation 1.5s infinite;
  }

  .dot:nth-child(2) {
    animation-delay: 0.5s;
  }

  .dot:nth-child(3) {
    animation-delay: 0.8s;
  }
  .dot:nth-child(4) {
    animation-delay: 1s;
  }
}
@keyframes loading-animation {
  0%,
  50%,
  80%,
  100% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.5);
  }
}
@media (max-width: 768px) {
  .loading {
    .loading-dots {
      margin-top: 26px !important;
    }
    .dot {
      width: 8px !important;
      height: 8px !important;
    }
  }
}
</style>
    